#ifndef ROOM_H
#define ROOM_H

#include <string>
#include <sw/redis++/redis++.h>
using namespace std;

class Room {
public:
    Room() = default;
    ~Room();

    bool initEnvironment(); // 初始化: 连接Redis服务器, 使用redis++提供的接口
    void clear();           // 清空数据

    void saveRsaSecKey(string field, string value); // 调用hset()保存RSA的密钥对, 1次保存1个:
                                                    // [key -> (field1 = "PublicKey", value1)、(field2 = "PrivateKey", value2)]
    string RsaSecKey(string field);                 // 调用hget()读取RSA的(公钥/私钥)

    string joinRoom(string userName);                // 玩家随机加入1个房间
    bool joinRoom(string userName, string roomName); // 玩家加入指定的房间
    string getNewRoomName(); // 随机生成房间的名字

    int getPlayerCount(string roomName); // 获取房间中玩家的数量
    void updatePlayerScore(string roomName, string userName, int score); // 更新玩家的分数
    string whereAmI(string userName);                  // 通过玩家名找到玩家的所属房间
    int playerScore(string roomName, string userName); // 查询玩家的分数
    string playersOrder(string roomName);              // 得到房间内玩家的抢地主次序

    void leaveRoom(string roomName, string userName); // 离开房间
    bool searchRoom(string roomName); // 搜索房间
private:
    sw::redis::Redis* _redis; // 连接Redis服务器的实例
    const string _onePlayer = "OnePlayer";      // [玩家数=1的房间(set)]的key
    const string _twoPlayer = "TwoPlayers";     // [玩家数=2的房间(set)]的key
    const string _threePlayer = "ThreePlayers"; // [玩家数=3的房间(set)]的key
    const string _invalid = "Invalid"; // 被遗弃的房间: 玩家人数可以为0/1/2
};

#endif //ROOM_H
